理解extern char s[100]与extern char *s】的更多相关文章

在x.c中定义了一个字符数组 char s[100],在l.c中进行引用extern char s[200], 有些c程序新手经常把它写成extern char *s. 这两种写法的含义一样吗? 首先得理解声明与定义的含义:定义一个变量意味着要给它进行内存分配, 而声明一个变量则可以在其他文件中, 只是进行一种声明, 表示有这个变量存在, 但是在其他文件中定义, 声明后不用分配内存. 我们看一下extern char s[100]与extern char *s在执行s[10]的取值过程是什么样的…
1 #include<stdio.h> 2 #include<string.h> 3 4 int main() 5 { 6 char a[100] = "1+2=;3-2=;2*5=;8/4=;" ; 7 char b[100] = {0}; 8 char *s; 9 s = strtok(a, ";"); 10 while(s) 11 { 12 13 int i,j; 14 char c; 15 sscanf(s, "%d%c%d…
原文:理解C语言中的关键字extern 最近写了一段C程序,编译时出现变量重复定义的错误,自己查看没发现错误.使用Google发现,自己对extern理解不透彻,我搜到了这篇文章,写得不错.我拙劣的翻译了一下.(原文:http://www.geeksforgeeks.org/understanding-extern-keyword-in-c/)   我确定这篇文章对c语言的初学者会有很大的帮助,因为这将使他们更好更熟练的使用c语言.所以就让我先来说说extern关键字在变量和函数上的应用.最基本…
char * p = "abc"与const char *p = "abc"的区别是什么呢? 第一个语句会产生问题: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings] 此时我们只需要改成第二个用法警告就消失了,这是为什么呢? 我们来分别理解以下两个语句,首先要清楚的是char * p语句定义的p是一个指针变量,假设我们用的是第一个语句,那么我们所表达的意思…
1.LBP and CSLBP 2.再论char c[]=”hello world”和char *str=”hello world”的区别 /**************代码1*********************/ char *strA() { char str[]="hello world"; return str; } /****************代码2****************/ const char *strA() { char *str="hell…
C語言有兩種字串宣告方式char s[]和char *s,兩者有什麼差異呢? Introduction char s[] = "Hello World"; (只是用字符串常量初始化)char *s  = "Hello World"; 皆宣告了s字串,在C-style string的函數皆可使用,但兩者背後意義卻不相同. char s[] = "Hello World"; 的s是個char array,含12個byte(包含結尾\0),"…
#include <iostream> #include <string> using namespace std; void convertUnCharToStr(char* str, unsigned char* UnChar, int ucLen) { int i = 0; for(i = 0; i < ucLen; i++) { //格式化输str,每unsigned char 转换字符占两位置%x写输%X写输 sprintf(str + i * 2, "%…
转自:jianchi88 http://blog.csdn.net/jianchi88/article/details/6876405 #include<stdio.h> int main() { char a[] = "hello world1"; char *p = "hello world2"; *(a+)='q'; *(p+)='q'; printf("%s\n",a); printf("%s\n",p);…
我用FillChar()函数时,发现两个版本中的Char不一样. 在delphi7中 procedure TForm2.Button1Click(Sender: TObject); var s: array[0..3] of Char; i: integer; begin FillChar(s, SizeOf(s), '1'); // 填充字符 ShowMessage(s); // 1111 end; 在XE中同样的代码,s却是这样: 把Char改成AnsiChar 就可以了 可能是应为delp…
1. 前者定义P为常量,即只能单向赋值一次,P++展开为p=p+1,重复赋值给常量,出错,后者P为地址变量,地址变量是指向该变量的存储地址值如:4B3F6A,不能赋给一个字符值(字符相当于ascii表中对应的整数)如强制赋值,会把原地址变量P变为一个两位数的整数,造成地址指针溢出.而p++,则表示把该地址变量向下一个存储单元移动一位,如4B3F6A到4B3F6B.所以合法. 2.char *const p 修饰指针为常量 指针指向内容可以是变量~既 p++这样的操作不合法 *p='3' 合法 c…