我现在正在阅读"学习C"一书,并且遇到了一个我真的不明白的问题.练习的目的是找到这段代码的问题:
char c;
c = 'a';
printf("c holds the character %c.",c);
Run Code Online (Sandbox Code Playgroud)
..然后它给出了解释说:"文本字符串"a"由两个字符组成,'a'和终止零字节.变量c的大小只有一个字节.即使c是2个字节很长一段时间,你无法以这种方式复制文本字符串.尝试将文本一次一个字节复制到一个足够大的变量中,以保存文本字符串及其终止零字节.
但是,当我运行上面的代码时 - 它完全正常.我以为我理解为什么它是坏的理论 - 整个字符串末尾的终止0,所以我重写了这样的代码来测试:
char c[2];
*c = 'a';
printf("c holds the character %c.",c);
Run Code Online (Sandbox Code Playgroud)
但这会产生问题.我开始对这个问题感到困惑.第二组代码不会将字母'a'传递给c [0]处的指针,然后将终止0传递给c [1] - 完全使用分配给该数组的2个空格?
python中这两个语句之间有区别吗:
if tag == ('/event' or '/organization' or '/business'):
Run Code Online (Sandbox Code Playgroud)
和
if tag == '/event' or '/organization' or '/business':
Run Code Online (Sandbox Code Playgroud) 我真的对指针如何工作感到困惑.我正在尝试编写简短的小程序,这些程序将完全阐明它们的工作方式,并且我遇到了一些麻烦.例如:
char c[3]; //Creates an array of 3 bytes - the first 2 bytes can be used for characters and the 3rd would need to be used for the terminating zero
*c = 'a'; //sets c[0] to 'a'
*c++; //moves the pointer to c[1]
*c = 'b'; //sets c[1] to 'b'
*c++; //moves the pointer to c[2]
*c = '\0' //sets c[2] to the terminating zero
Run Code Online (Sandbox Code Playgroud)
显然这段代码不正确,否则我不会在论坛上投票:)
我只是从一本书中解决这个问题,有人可以简单地解释一下这个概念吗?
男人,指针继续给我带来麻烦.我以为我理解了这个概念.(基本上,当你想操纵ptr指向的位置保存的实际内存时,你会使用*ptr.如果你想通过做这样的事情来移动指针,你会使用ptr作为ptr ++或ptr--.)所以,如果是这种情况,如果你使用星号来操纵指针所指向的文件,这是如何工作的:
char *MallocAndCopy( char *line ) {
char *pointer;
if ( (pointer = malloc( strlen(line)+1 )) == NULL ) {
printf( "Out of memory!!! Goodbye!\n" );
exit( 0 );
}
strcpy( pointer, line );
return pointer;
}
Run Code Online (Sandbox Code Playgroud)
malloc返回一个指针,所以我理解为什么if条件中的"指针"不使用星号.但是,在strcpy函数中,它将行的CONTENTS发送到指针的CONTENTS.不应该是:
strcpy( *pointer, *line);
Run Code Online (Sandbox Code Playgroud)
????? 或者我对指针的理解是正确的,这只是strcpy函数的工作方式吗?
我正在阅读的书中的一个练习的示例显示以下代码:
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int input, reverse, numberOfDigits;
reverse = 0;
numberOfDigits = 0;
NSLog (@"Please input a multi-digit number:");
scanf ("%i", &input);
if ( input < 0 ) {
input = -input;
NSLog (@"Minus");
}
do {
reverse = reverse * 10 + input % 10;
numberOfDigits++;
} while (input /= 10);
do {
switch ( reverse % 10 ) {
case 0:
NSLog …Run Code Online (Sandbox Code Playgroud) 我终于得到了新版本的Xcode和iOS4下载,并最终试图将我的第一个应用程序放到设备上.我正在完成配置文件,并且到了我需要打开Xcode的地步 - 然后在"设备"下拉菜单中所说的全部是"Base SDK Missing".
如果我转到"Project> Set Active SDK",我看到的所有内容都是灰色的字母,上面写着"Base SDK Missing".
我正在努力学习C和我正在使用的书(Apress''Learn C')有一章在随机访问功能上非常混乱.以下代码令我困惑:
int GetNumberOfDinos( void ) {
FILE *fp;
long fileLength;
if ( (fp = fopen( kDinoFileName, "r" )) == NULL )
DoError( "Couldn't open file...Goodbye!" );
if ( fseek( fp, 0L, SEEK_END ) != 0 )
DoError( "Couldn't seek to end of file...Goodbye!" );
if ( (fileLength = ftell( fp )) == -1L )
DoError( "ftell() failed...Goodbye!" );
fclose( fp );
return( (int)(fileLength / kDinoRecordSize) );
}
Run Code Online (Sandbox Code Playgroud)
我理解代码的目的,但不了解如何实现该目的.fopen系列很容易理解.fseek和ftell是我的麻烦开始的地方.fseek的参数是文件,偏移量,然后是3个SEEK中的一个.为什么它的条件不是零呢?如果文件确实存在(kDinoFileName),并且他们想要指向该文件的末尾,为什么该位置为零?文件存在,有信息!然后我完全不明白ftell函数将如何以-1L结束?这个代码比它需要的更难吗?
这似乎是如此基本但由于某种原因我不能让它工作 - 2个变量都定义为NSIntegers:
if ([AScore == "100"] && [BScore == "100"]) {
...
}
Run Code Online (Sandbox Code Playgroud)
这不起作用 - 当我拿走括号时它也不起作用 - 如果我试图实现'isEqualToString'命令也不行.我确信这是我犯的一个非常基本的错误.
我以为我真的开始明白指针是如何工作的,然后我遇到了这个练习.我试图重新的代码块,我在我的"学习C"本书中,我得到了它做,这是工作,我认为一切是伟大的:
void PrintWords( char *line ) {
bool inWord = false;
while (*line != kByteZero) {
if (! isspace(*line)) {
if (inWord == false) {
putchar('\n');
inWord = true;
}
putchar(*line);
} else {
inWord = false;
}
*line++;
}
}
Run Code Online (Sandbox Code Playgroud)
它只是一个简单的函数,可以在不同的行上显示数组的单词.当我将它与书中的代码进行比较时,我看到了一个明显的区别.本书代码中的最后一行是'line ++'而不是'*line ++'.
我认为使用'line ++'与我们在这里尝试做的完全相反.我试图增加指针指向的位置,以及操纵存储在该内存地址的文件.'line ++'对我来说似乎很奇怪,因为我甚至不确定它告诉代码要做什么?从第[i]行移到第[i + 1]行?这似乎不可思议,因为那时"线"本身似乎只是作为一个指针 - 如果是这样的话,为什么我不能代替*线的每一个实例只用"行"?
维基百科称"const"是"......一种特殊的变量,其值在执行过程中通常不会被程序改变......"
如果是这种情况,为什么会这样:
const char *words[4] = { "aardvark", "abacus",
"allude", "zygote" };
*words = "first";
words[1] = "second";
int wordCount = 4;
int i;
for (i = 0; i < wordCount; i++) {
NSLog (@"%s is %d characters long",
words[i], strlen(words[i]));
}
Run Code Online (Sandbox Code Playgroud)
有一个输出:"第一""第二""暗示""合子"(显然与长度等)
我认为"const"的重点是防止被修改的变量?