C语言指针2

char * string =“I  LOVE china”;

在C 语言中 只有字符变量,没有字符串变量。

char *string; // 定义一个 char *  型变量。(字符指针变量);

string =“i love china”;

注:string 被定义为一个指针变量,基类型为字符型。只能指向一个字符型数据,而不能指向多个字符数据,只接受首地址。

//=====================

# include

int main( )

{

char a[ ] =“I am a man”,b[20];

int i;

for(i = 0;*(a+i) !=‘\0’;i++)

{

*(b + i) = *(a + i);

}

*(b + i) =‘\0’;

printf(“string a is :%s\n”,a);

printf(“string b is:”);

for(i = 0;b[i] !=‘\0’;i ++)

printf(“%c”,b[i]);

printf(“\n”);

return 0;

}

// ===== 指针处理===

char a []=“I am a man”,b[20],*p1,*p2;

p1 = a;p2 = b;

for(;p1 !=‘\0’;p1++,p2++)

*p2 = *p1;//将p1所指向的元素的值赋给p2 所指向的元素;

*p2 =‘\0’;

printf(“string a is :%s\n”,a);

printf(“string b is :%s\n”,b);

//============

2.字符指针 作为 函数参数

如果想把字符串 从一个 函数 传递到 另一个函数 ,可以用地址传递的方法,即用字符数组名作参数,也可用字符指针变量 作 参数。在被调用的函数中 可以 改变 字符串 的内容 ,在主调函数中可以引用改变后  字符串。

、用函数实现字符串的复制

void copy_string(char from[],char to[])

{

int i;

while(from[i] !=‘\0')

{

to[i] = from[i];i++;

}

to[i] =‘\0’;

}

void copy_string(char *from,char *to)

{

for(;*from !=‘\0’,from++,to++)

{

*to = *from;

}

*to =‘\0’;

}

//======

、指针变量的值可以改变,而数组名代表一个固定的值(数组元素的地址),不能改变。

、字符数组中各元素的值可以改变,但是字符指针变量指向的字符串常量中内容是不能被取代的。

char a[] =“house”;

char *b =“house”;

a[2] =‘r’;b[2] =‘r’;(非法的)

、引用数组元素。对字符数组可以用下标法一个数组元素,如a[5]; 也可以用地址法  *(a + 5);如果定义了字符指针变量  p,并使它指向字符数组首元素。就可以用指针变量带下标的形式引用字符数组元素(P[5]),同样,可以使用地址符号 *( p + 5);

、用指针变量指向一个格式字符串,可以用它代替格式字符。

char *format;

format =“a = %d,b=%f\n"

但是使用 字符数组时,只能采用 在定义数组时初始化,或者逐个对元素赋值,而不能对数组名 整体赋值。

2、指向函数的指针

在程序中定义了一个函数,在编译时,编译系统会自动为代码分配一段存储空间,这段存储空间的起始地址(又称入口地址),称为正饿函数的指针。

如何定义: 类型名 (*指针变量名)(函数参数表列)

类型名:函数返回值类的型

函数参数列表:形参的类型

int max(int ,int );

int min(int ,int);

int(*p)(int x,in y);

int a,b,c,n;

printf(“enter  a  and b:")

scanf(“%d,%d”,&a,&b);

printf(“choose 1 or 2:")

scanf(“%d”,&n);

if(n == 1) p = max;

else if (n ==2) p = min;

c = (*p)(a,b);

printf(“a = %d,b= %d”,a,b);

if ( n == 1) printf(“max = %d”,c);

else printf(“min = %d”,c);

return 0;

int max(int x,int y);

int min(int x,int y);

一个指向函数的指针变量  可以指向不同函数

3.用指向函数的指针   作为函数参数

指向函数的指针变量 的 一个 重要用途 是 把 函数的地址 作为参数传递 到其他 函数

int add(int x,int y)

{

int z;

z = x + y;

return z;

}

int min (int x,int y)

{

int z ;

z = (x > y) ? y:x;

return z;

}

int max(int x,int y)

{

int z;

z = (x > y) ? x : y;

return z;

}

int fun(int x,int y,int (*p) (int ,int)) // 声明形参 是 指向 函数的指针

{

int result;

result = (*p)(x,y);

printf(“%d\n”,result);

}

int main( )

{

int a =34,b = -21,n;

printf(“choose the number 1,2 or 3:”);

scanf(“%d”,&n);

if (n == 1)   fun(a,b,max); // max 作为实参 将其入口地址 传送给 fun中的形参 P;

if (n == 2)   fun(a,b,min);

if(n == 3)    fun(a,b,add);

return 0;

}

//===========================================

3、返回指针值的函数

一个函数 可以返回 一个整型值、字符值、实型值等 ~,也可返回指针型的数据。

int * a(int x,iint y); a 是函数名,调用它以后能得到 一个 int * 型(指向整形数据)的指针,即整型数据的地址。()优先级 高于 *; a 先与()结合,显然是函数形式。函数前面有* 。表示此函数是函数型指针(函数值时地址),最前面的int 表示 返回的 指针 指向整型变量。

类型名 * 函数名(参数表列);

有 a 个学生,每个学生有  b 们成绩。要求在学生输入学生 序号以后,能输出 该生的全部成绩。

// 数组 存放 成绩;查询学生成绩的函数 ,它是一个返回 指针 的函数,形参是指向 一维数组的 指针变量和整形变量。从主函数 将 数组名 和 score 和要找的 学生号 k    传递给形参,返回值 是& score[K][0];

# include

int main( )

{

float score[][4] = {{60,70,80,90},{56,89,67,88},{34,78,90,66}};

float *search (float (*pointer)[4],int n);

float *p;

int i ,k;

printf(“enter the number of student:”);

scanf(“%d”,&k);

printf(“the score of No.%d are :\n”,k);

p = search(score ,k);

for(i = 0,i < 4.i++) printf(“%5.2f\t”,*(p +i));

printf(“\n”);

return 0;

}

float *search(float(* pointerp[4],int n))

{

float *pt;

pt = *(pointer +n);

return pt;

}

//==============

int main()

{

float score[][4] = {{60,70,80,90},{56,89,67,88},{34,78,90,66}};

float *search (float (*pointer)[4],int n);

int *p;

int i,j;

for(i = 0;i < 3;i++)

{

p = search(score + i);

if (p == *(score + i))

{

printf(“No.%d score:”,i)

for (j = 0;j < 4;j++)

printf(“%5.2f  “,*(p+j))

}

}

return 0;

}

float *search (float (*pointer)[4],int n);

{

int i = 0;

float *pt;

pt = NULL;

for(;i < 4;i++)

if (*(* pointer +i) < 60)  pt = pointer;

return pt;

}

//===============================

指针数组 和多重指针

类型名 * 数组名[]

# include

# include

int main( )

{

void sort(char *name[ ],int n);

void print(char *name[ ],int n);

char * name[ ] = {“Follow me”,”BASIC”,”Great Wall”,”FORTRAN”,”Competer design”};

// 定义指针数组 ,它的元素 分别 指向5个字符串

int n = 5;

sort(name,n);

print(name,n);

return 0;

}

void sort(char * name[ ],int n)

{

char *temp;

int i,j,k;

for(i = 0;i < n-1;i++)

{

k =i;

for(j = i +1;j < n;j++) if (strcmp(name[k],name[j]) > 0) k = j;

if(k != i )

{

temp = name[i];name[i] = name[k]; name[k] = temp;

}

}

}

void print(char *name[ ],int n)

{

int i;

for(i = 0;i < n;i++) printf(“%s”,name[i]);

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容