linux定义一个指针变量 char *p;p在内存中放哪里?&p又在哪?

linux定义一个指针变量 char *p;p在内存中放哪里?&p又在哪?,第1张

**p是二级指针的意思,也就是指针的指针。

当然可以用char **p去定义一个二维char数组

只不过要用到malloc动态申请内存来放二维字符数组。

格式如下:

#include "stdio.h"

main()

{

char **p

int i,j

int row,rank

//输入二维数组的行数和列数

printf("Please input row and rank:\n")

scanf("%d%d",&row,&rank)

//以下为动态申请二维数组

p=(int **)malloc(row*sizeof(char))

for(i=0i<rowi++)

p[i]=(int *)malloc(rank*sizeof(char))

//输入二维字符数组字符

printf("Please input data:\n")

for(i=0i<rowi++)

for(j=0j<rankj++)

scanf(" %c",&p[i][j])//注意%c前有空格键,切不可丢失!

//打印二维字符数组字符

for(i=0i<rowi++)

{

for(j=0j<rankj++)

printf("%c ",p[i][j])

printf("\n")

}

}

虽然我也是菜鸟,但比我还菜的问题,我是能回答出来的!

QQ121590680,虽然我加过几个C群,但里面鱼龙混杂,没几个对C有兴趣的!

高手就不敢谈了。

如果对你有所帮助,请记得采纳最佳答案,谢谢!

char *p = xxxx

if(p)

printf("%d\n",strlen(p))

我这里是把指针当做指向字符串的格式。注意,一定要测 p是否NULL,否则没意义了

这个问题,实际上在今天的JulianTec adil 邮件列表中有人问到了。 yihe chen 给出了答案:

这个问题得从指针说起。。

C语言里面的指针可以指向任何有效的数据,也可以

不指向任何东西;这后者即所谓的NULL指针。

指向有效数据的时候,对它使用*做dereference *** 作

就可以取出数据来了;但是对不指向任何数据的指针

来进行* *** 作肯定就没什么意义了,对吧?这其实是个

bug。

在现代的 *** 作系统设计中,为了消除程序里面的这种

bug,故意分配一个专门的不能访问的内存页,然后

将NULL指针安排在里面。这样当程序员不小心在自己

的程序中写下对NULL指针的提领 *** 作后,系统运行时

就会报错。

在windows和linux中,这样的内存页被设计者安排在

0地址开始对应的那个页上。实际上,这个页面里面

的任何地址都是不能被提领的。*((char *)0) 不可以,

*((char *)0x12)之类的地址也不可以。

很多人认为NULL指针其实就是指向0地址的指针,实际

上这是不准确的。虽然很少见,但也有处理器架构将

NULL指针安排在非零地址起始的页面内。所以为了程

序的可移植性,在需要使用NULL指针的时候,用null

而来不用0值来初始化指针变量。

你可以访问这里的归档:http://www.juliantec.info/mlist/archives/index.html

但是今天的,没这么快归进去,你可以访问这里的记录:

http://www.freelists.org/post/juliantec_list/char-0,1


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8673056.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-19
下一篇2023-04-19

发表评论

登录后才能评论

评论列表(0条)

    保存